package com.example.mybatisplusdemo.model.domain;

import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.List;

@Data
public class ItineraryRequest {
    // 行程类型 - 必需
    private String type; // "SINGLE", "ROUND_TRIP", "MULTI_CITY"

    // 行程段信息 - 必需
    private List<SegmentRequest> segments;

    // 舱位等级 - 必需
    private String cabinClass; // "ECONOMIC", "BUSINESS", "FIRST"

    // 乘客信息 - 必需
    private Integer adultCount; // 成人数量
    private Integer childCount; // 儿童数量
    private Integer infantCount; // 婴儿数量

    // 排序选项 - 可选
    private String sortBy; // "price", "duration", "departure_time",
    // "punctuality", "carbon", "comfort", "recommendation"
    private String sortOrder = "asc"; // "asc" 或 "desc"

    // 航班过滤条件 - 可选
    private List<String> airlines; // 航空公司IATA代码列表
    private BigDecimal minPrice; // 最低价格
    private BigDecimal maxPrice; // 最高价格
    private Integer maxStops = 2; // 最大中转次数 (0-3)
    private Double minPunctuality = 0.7; // 最低准点率 (0.0-1.0)
    private Double minComfort = 3.0; // 最低舒适度 (0-5)
    private Double maxCarbon; // 最大碳排放量 (kg)
    private List<String> allianceCodes; // 航空联盟代码

    // 时间过滤 - 可选
    private List<TimeFilter> departureTimeFilters; // 出发时间过滤
    private List<TimeFilter> arrivalTimeFilters;   // 到达时间过滤

    // 中转过滤 - 可选
    private List<String> includeTransferCities; // 必须包含的中转城市
    private List<String> excludeTransferCities; // 必须排除的中转城市

    // 智能推荐选项 - 可选
    private Boolean enableSmartCombination = true; // 是否启用智能中转组合
    private Integer minTransferMinutes = 90;       // 最小中转时间 (分钟)
    private Integer maxTransferMinutes = 360;      // 最大中转时间 (分钟)
    private Boolean preferSameAirline;    // 偏好同一航空公司
    private Boolean preferSameAlliance;   // 偏好同一航空联盟
    private Boolean directFlightFirst;    // 优先显示直飞航班

    // 供应商过滤 - 可选
    private List<String> preferredSuppliers; // 偏好的供应商列表

    // 内部使用字段
    private String userId; // 用于个性化推荐
    private String currency = "CNY"; // 货币类型

    // 时间过滤器
    @Data
    public static class TimeFilter {
        private LocalTime startTime; // 开始时间
        private LocalTime endTime;   // 结束时间
        private String type;         // "morning", "afternoon", "evening", "custom"
    }
}